/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.brasilerp.compras;

import br.com.brasilerp.recepcao.NotaEntrada;
import br.com.brasilerp.recepcao.Recepcao;
import br.com.brasilerp.recepcao.RecepcaoException;
import br.com.brasilerp.recepcao.Recepcionavel;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author rgrosz
 */
public class Fornecedor {
    private Recepcao recepcao;
    private BigDecimal valorRecebido;
    
    public Fornecedor(){
        this.valorRecebido = new BigDecimal(0);
    }
            
    public void fornecer(Compravel item) throws FornecedorException{
        NotaEntrada nota = this.createNota(item);
        RecepcionavelLocal recepcionavel = new RecepcionavelLocal(item);
        recepcionavel.setNotaEntrada(nota);
        try {
            recepcao.receberProduto(recepcionavel);
        } catch (RecepcaoException ex) {
            throw new FornecedorException(ex);
        }
    }
    
    public void setRecepcao(Recepcao recepcao){
        this.recepcao = recepcao;
    }
    
    public void receberPagamento(Montante montante){
        valorRecebido = valorRecebido.add(montante.getValor());
    }
    
    
    private NotaEntrada createNota(Compravel item){
        NotaEntrada nota = new NotaEntrada();
        nota.setFornecedor(this);
        nota.setValor(item.getValor());
        return nota;
    }
    
    private class RecepcionavelLocal implements Recepcionavel{

        private NotaEntrada nota;
        private List<Compravel> lista;
        
        
        
        public RecepcionavelLocal(Compravel item){
            this.lista = new ArrayList<Compravel>();
            this.lista.add(item);
        }
        
        public void setNotaEntrada(NotaEntrada nota){
            this.nota = nota;
        }
        
        @Override
        public NotaEntrada getNotaEntrada() {
            return nota;
        }

        @Override
        public List<Compravel> getItensComprados() {
            return lista;
        }
        
    }
    
            
            
}
